home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 1998 November / IRIX 6.5.2 Base Documentation November 1998.img / usr / share / catman / p_man / cato / Xm / UIL.z / UIL
Text File  |  1998-10-20  |  119KB  |  2,179 lines

  1.  
  2.  
  3.  
  4.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  5.  
  6.  
  7.  
  8.      NNNNAAAAMMMMEEEE
  9.           UUUUIIIILLLL - The user interface language file format
  10.  
  11.      SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.           MMMMOOOODDDDUUUULLLLEEEE _m_o_d_u_l_e__n_a_m_e
  13.                [ NNNNAAAAMMMMEEEESSSS ==== CCCCAAAASSSSEEEE____IIIINNNNSSSSEEEENNNNSSSSIIIITTTTIIIIVVVVEEEE | CCCCAAAASSSSEEEE____SSSSEEEENNNNSSSSIIIITTTTIIIIVVVVEEEE ]
  14.                [ CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT ==== _c_h_a_r_a_c_t_e_r__s_e_t ]
  15.                [ OOOOBBBBJJJJEEEECCCCTTTTSSSS ==== {{{{ _w_i_d_g_e_t__n_a_m_e ==== GGGGAAAADDDDGGGGEEEETTTT | WWWWIIIIDDDDGGGGEEEETTTT;;;; [...] }}}} ]
  16.                {{{{ [
  17.                [ _v_a_l_u_e__s_e_c_t_i_o_n ] |
  18.                [ _p_r_o_c_e_d_u_r_e__s_e_c_t_i_o_n ] |
  19.                [ _l_i_s_t__s_e_c_t_i_o_n ] |
  20.                [ _o_b_j_e_c_t__s_e_c_t_i_o_n ] |
  21.                [ _i_d_e_n_t_i_f_i_e_r__s_e_c_t_i_o_n ]
  22.                [ ... ]
  23.                ] }}}}
  24.           EEEENNNNDDDD MMMMOOOODDDDUUUULLLLEEEE;;;;
  25.  
  26.      DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  27.           The UIL language is used for describing the initial state of
  28.           a user interface for a widget based application.  UIL
  29.           describes the widgets used in the interface, the resources
  30.           of those widgets, and the callbacks of those widgets.  The
  31.           UIL file is compiled into a UID file using the command uuuuiiiillll
  32.           or by the callable compiler UUUUiiiillll(((()))).  The contents of the
  33.           compiled UID file can then by accessed by the various Motif
  34.           Resource Management (MRM) functions from within an
  35.           application program.
  36.  
  37.      FFFFIIIILLLLEEEE FFFFOOOORRRRMMMMAAAATTTT
  38.           UIL is a free-form language.  This means that high-level
  39.           constructs such as object and value declarations do not need
  40.           to begin in any particular column and can span any number of
  41.           lines.  Low-level constructs such as keywords and
  42.           punctuation characters can also begin in any column;
  43.           however, except for string literals and comments, they
  44.           cannot span lines.
  45.  
  46.           The UIL compiler accepts input lines up to 132 characters in
  47.           length.
  48.  
  49.           MMMMOOOODDDDUUUULLLLEEEE _m_o_d_u_l_e__n_a_m_e
  50.                     The name by which the UIL module is known in the
  51.                     UID file.  This name is stored in the UID file for
  52.                     later use in the retrieval of resources by the
  53.                     MRM.  This name is always stored in uppercase in
  54.                     the UID file.
  55.  
  56.           NNNNAAAAMMMMEEEESSSS ==== CCCCAAAASSSSEEEE____IIIINNNNSSSSEEEENNNNSSSSIIIITTTTIIIIVVVVEEEE | CCCCAAAASSSSEEEE____SSSSEEEENNNNSSSSIIIITTTTIIIIVVVVEEEE
  57.                     Indicates whether names should be treated as case
  58.                     sensitive or case insensitive.  The default is
  59.                     case sensitive. The case-sensitivity clause should
  60.  
  61.  
  62.  
  63.      Page 1                                          (printed 4/30/98)
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  71.  
  72.  
  73.  
  74.                     be the first clause in the module header, and in
  75.                     any case must precede any statement that contains
  76.                     a name.  If names are case sensitive in a UIL
  77.                     module, UIL keywords in that module must be in
  78.                     lowercase.  Each name is stored in the UIL file in
  79.                     the same case as it appears in the UIL module. If
  80.                     names are case insensitive, then keywords can be
  81.                     in uppercase, lowercase, or mixed case, and the
  82.                     uppercase equivalent of each name is stored in the
  83.                     UID file.
  84.  
  85.           CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT ==== _c_h_a_r_a_c_t_e_r__s_e_t
  86.                     Specifies the default character set for string
  87.                     literals in the module that do not explicitly set
  88.                     their character set.  The default character set,
  89.                     in the absence of this clause is the codeset
  90.                     component of the LLLLAAAANNNNGGGG environment variable, or the
  91.                     value of XXXXmmmmFFFFAAAALLLLLLLLBBBBAAAACCCCKKKK____CCCCHHHHAAAARRRRSSSSEEEETTTT if LLLLAAAANNNNGGGG is not set or
  92.                     has no codeset component.  The value of
  93.                     XXXXmmmmFFFFAAAALLLLLLLLBBBBAAAACCCCKKKK____CCCCHHHHAAAARRRRSSSSEEEETTTT is defined by UIL supplier, but
  94.                     is usually ISO8859-1 (equivalent to ISO_LATIN1).
  95.                     Use of this clause turns off all localized string
  96.                     literal processing turned on by the compiler flag
  97.                     ----ssss or the UUUUiiiillll____ccccoooommmmmmmmaaaannnndddd____ttttyyyyppppeeee ddddaaaattttaaaa ssssttttrrrruuuuccccttttuuuurrrreeee eeeelllleeeemmmmeeeennnntttt
  98.                     uuuusssseeee____sssseeeettttllllooooccccaaaalllleeee____ffffllllaaaagggg.
  99.  
  100.           OOOOBBBBJJJJEEEECCCCTTTTSSSS ==== {{{{ _w_i_d_g_e_t__n_a_m_e = GGGGAAAADDDDGGGGEEEETTTT | WWWWIIIIDDDDGGGGEEEETTTT;;;; }}}}
  101.                     Indicates whether the widget or gadget form of the
  102.                     control specified by _w_i_d_g_e_t__n_a_m_e is used by
  103.                     default.  By default the widget form is used, so
  104.                     the gadget keyword is usually the only one used.
  105.                     The specified control should be one that has both
  106.                     a widget and gadget version:  XmCascadeButton,
  107.                     XmLabel, XmPushButton, XmSeparator, and
  108.                     XmToggleButton.  The form of more than one control
  109.                     can be specified by delimiting them with
  110.                     semicolons.  The gadget or widget form of an
  111.                     instance of a control can be specified with the
  112.                     GGGGAAAADDDDGGGGEEEETTTT and WWWWIIIIDDDDGGGGEEEETTTT keywords in a particular object
  113.                     declaration.
  114.  
  115.           _v_a_l_u_e__s_e_c_t_i_o_n
  116.                     Provides a way to name a value expression or
  117.                     literal.  The value name can then be referred to
  118.                     by declarations that occur elsewhere in the UIL
  119.                     module in any context where a value can be used.
  120.                     Values can be forward referenced.  Value sections
  121.                     are described in more detail later in the
  122.                     reference page.
  123.  
  124.           _p_r_o_c_e_d_u_r_e__s_e_c_t_i_o_n
  125.                     Defines the callback routines used by a widget and
  126.  
  127.  
  128.  
  129.      Page 2                                          (printed 4/30/98)
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  137.  
  138.  
  139.  
  140.                     the creation routines for user-defined widgets.
  141.                     These definitions are used for error checking.
  142.                     Procedure sections are described in more detail
  143.                     later in the reference page.
  144.  
  145.           _l_i_s_t__s_e_c_t_i_o_n
  146.                     Provides a way to group together a set of
  147.                     arguments, controls (children), callbacks, or
  148.                     procedures for later use in the UIL module.  Lists
  149.                     can contain other lists, so that you can set up a
  150.                     hierarchy to clearly show which arguments,
  151.                     controls, callbacks, and procedures are common to
  152.                     which widgets.  List sections are described in
  153.                     more detail later in the reference page.
  154.  
  155.           _o_b_j_e_c_t__s_e_c_t_i_o_n
  156.                     Defines the objects that make up the user
  157.                     interface of the application.  You can reference
  158.                     the object names in declarations that occur
  159.                     elsewhere in the UIL module in any context where
  160.                     an object name can be used (for example, in a
  161.                     controls list, as a symbolic reference to a widget
  162.                     ID, or as the tag_value argument for a callback
  163.                     procedure). Objects can be forward referenced.
  164.                     Object sections are described in more detail later
  165.                     in the reference page.
  166.  
  167.           _i_d_e_n_t_i_f_i_e_r__s_e_c_t_i_o_n
  168.                     Defines a run-time binding of data to names that
  169.                     appear in the UIL module.  Identifier sections are
  170.                     described in more detail later in the reference
  171.                     page.
  172.  
  173.  
  174.           The UIL file can also contain comments and include
  175.           directives, which are described along with the main elements
  176.           of the UIL file format in the following sections.
  177.  
  178.         CCCCoooommmmmmmmeeeennnnttttssss
  179.           Comments can take one of two forms, as follows:
  180.  
  181.  
  182.             +o  The comment is introduced with the sequence ////**** followed
  183.                by the text of the comment and terminated with the
  184.                sequence ****////.  This form of comment can span multiple
  185.                source lines.
  186.  
  187.             +o  The comment is introduced with an !!!! (exclamation
  188.                point), followed by the text of the comment and
  189.                terminated by the end of the source line.
  190.  
  191.  
  192.  
  193.  
  194.  
  195.      Page 3                                          (printed 4/30/98)
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  203.  
  204.  
  205.  
  206.           Neither form of comment can be nested.
  207.  
  208.         VVVVaaaalllluuuueeee sssseeeeccccttttiiiioooonnnnssss
  209.           A value section consists of the keyword VVVVAAAALLLLUUUUEEEE followed by a
  210.           sequence of value declarations.  It has the following
  211.           syntax:
  212.  
  213.           VVVVAAAALLLLUUUUEEEE _v_a_l_u_e__n_a_m_e ::::
  214.                [ EEEEXXXXPPPPOOOORRRRTTTTEEEEDDDD | PPPPRRRRIIIIVVVVAAAATTTTEEEE ] _v_a_l_u_e__e_x_p_r_e_s_s_i_o_n |
  215.                IIIIMMMMPPPPOOOORRRRTTTTEEEEDDDD _v_a_l_u_e__t_y_p_e ;;;;
  216.  
  217.           Where _v_a_l_u_e__e_x_p_r_e_s_s_i_o_n is assigned to _v_a_l_u_e__n_a_m_e or a
  218.           _v_a_l_u_e__t_y_p_e is assigned to an imported value name.  A value
  219.           declaration provides a way to name a value expression or
  220.           literal.  The value name can be referred to by declarations
  221.           that occur later in the UIL module in any context where a
  222.           value can be used.  Values can be forward referenced.
  223.  
  224.  
  225.           EEEEXXXXPPPPOOOORRRRTTTTEEEEDDDD  A value that you define as exported is stored in
  226.                     the UID file as a named resource, and therefore
  227.                     can be referenced by name in other UID files.
  228.                     When you define a value as exported, MRM looks
  229.                     outside the module in which the exported value is
  230.                     declared to get its value at run time.
  231.  
  232.           PPPPRRRRIIIIVVVVAAAATTTTEEEE   A private value is a value that is not imported or
  233.                     exported.  A value that you define as private is
  234.                     not stored as a distinct resource in the UID file.
  235.                     You can reference a private value only in the UIL
  236.                     module containing the value declaration. The value
  237.                     or object is directly incorporated into anything
  238.                     in the UIL module that references the declaration.
  239.  
  240.           IIIIMMMMPPPPOOOORRRRTTTTEEEEDDDD  A value that you define as imported is one that is
  241.                     defined as a named resource in a UID file.  MRM
  242.                     resolves this declaration with the corresponding
  243.                     exported declaration at application run time.
  244.  
  245.  
  246.           By default, values and objects are private.  The following
  247.           is a list of the supported value types in UIL.
  248.  
  249.  
  250.             +o  AAAANNNNYYYY
  251.  
  252.             +o  AAAARRRRGGGGUUUUMMMMEEEENNNNTTTT
  253.  
  254.             +o  BBBBOOOOOOOOLLLLEEEEAAAANNNN
  255.  
  256.             +o  CCCCOOOOLLLLOOOORRRR
  257.  
  258.  
  259.  
  260.  
  261.      Page 4                                          (printed 4/30/98)
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  269.  
  270.  
  271.  
  272.             +o  CCCCOOOOLLLLOOOORRRR____TTTTAAAABBBBLLLLEEEE
  273.  
  274.             +o  CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG
  275.  
  276.             +o  FFFFLLLLOOOOAAAATTTT
  277.  
  278.             +o  FFFFOOOONNNNTTTT
  279.  
  280.             +o  FFFFOOOONNNNTTTT____TTTTAAAABBBBLLLLEEEE
  281.  
  282.             +o  FFFFOOOONNNNTTTTSSSSEEEETTTT
  283.  
  284.             +o  IIIICCCCOOOONNNN
  285.  
  286.             +o  IIIINNNNTTTTEEEEGGGGEEEERRRR
  287.  
  288.             +o  IIIINNNNTTTTEEEEGGGGEEEERRRR____TTTTAAAABBBBLLLLEEEE
  289.  
  290.             +o  KKKKEEEEYYYYSSSSYYYYMMMM
  291.  
  292.             +o  RRRREEEEAAAASSSSOOOONNNN
  293.  
  294.             +o  SSSSIIIINNNNGGGGLLLLEEEE____FFFFLLLLOOOOAAAATTTT
  295.  
  296.             +o  SSSSTTTTRRRRIIIINNNNGGGG
  297.  
  298.             +o  SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE
  299.  
  300.             +o  TTTTRRRRAAAANNNNSSSSLLLLAAAATTTTIIIIOOOONNNN____TTTTAAAABBBBLLLLEEEE
  301.  
  302.             +o  WWWWIIIIDDDDEEEE____CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR
  303.  
  304.             +o  WWWWIIIIDDDDGGGGEEEETTTT
  305.  
  306.  
  307.         PPPPrrrroooocccceeeedddduuuurrrreeee sssseeeeccccttttiiiioooonnnnssss
  308.           A procedure section consists of the keyword PPPPRRRROOOOCCCCEEEEDDDDUUUURRRREEEE
  309.           followed by a sequence of procedure declarations.  It has
  310.           the following syntax:
  311.  
  312.           PPPPRRRROOOOCCCCEEEEDDDDUUUURRRREEEE
  313.                _p_r_o_c_e_d_u_r_e__n_a_m_e [ (((( [ _v_a_l_u_e__t_y_p_e ] )))) ] ;;;;
  314.  
  315.           Use a procedure declaration to declare:
  316.  
  317.  
  318.             +o  A routine that can be used as a callback routine for a
  319.                widget
  320.  
  321.             +o  The creation function for a user-defined widget
  322.  
  323.  
  324.  
  325.  
  326.  
  327.      Page 5                                          (printed 4/30/98)
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  335.  
  336.  
  337.  
  338.           You can reference a procedure name in declarations that
  339.           occur later in the UIL module in any context where a
  340.           procedure can be used.  Procedures can be forward
  341.           referenced.  You cannot use a name you used in another
  342.           context as a procedure name.
  343.  
  344.           In a procedure declaration, you have the option of
  345.           specifying that a parameter will be passed to the
  346.           corresponding callback routine at run time.  This parameter
  347.           is called the callback tag.  You can specify the data type
  348.           of the callback tag by putting the data type in parentheses
  349.           following the procedure name.  When you compile the module,
  350.           the UIL compiler checks that the argument you specify in
  351.           references to the procedure is of this type.  Note that the
  352.           data type of the callback tag must be one of the valid UIL
  353.           data types.  You can use a widget as a callback tag, as long
  354.           as the widget is defined in the same widget hierarchy as the
  355.           callback, that is they have a common ancestor that is in the
  356.           same UIL hierarchy.
  357.  
  358.           The following list summarizes how the UIL compiler checks
  359.           argument type and argument count, depending on the procedure
  360.           declaration.
  361.  
  362.  
  363.           No parameters       No argument type or argument count
  364.                               checking occurs. You can supply either 0
  365.                               or 1 aguments in the prcedure reference.
  366.  
  367.           (((( ))))                 Checks that the argument count is 0.
  368.  
  369.           ((((AAAANNNNYYYY))))               Checks that the argument count is 1.
  370.                               Does not check the argument type.  Use
  371.                               the AAAANNNNYYYY type to prevent type checking on
  372.                               procedure tags.
  373.  
  374.           ((((_t_y_p_e))))              Checks for one argument of the specified
  375.                               type.
  376.  
  377.           ((((_c_l_a_s_s__n_a_m_e))))        Checks for one widget argument of the
  378.                               specified widget class.
  379.  
  380.  
  381.           While it is possible to use any UIL data type to specify the
  382.           type of a tag in a procedure declaration, you must be able
  383.           to represent that data type in the programming language you
  384.           are using.  Some data types (such as integer, Boolean, and
  385.           string) are common data types recognized by most programming
  386.           languages. Other UIL data types (such as string tables) are
  387.           more complicated and may require you to set up an
  388.           appropriate corresponding data structure in the application
  389.           in order to pass a tag of that type to a callback routine.
  390.  
  391.  
  392.  
  393.      Page 6                                          (printed 4/30/98)
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  401.  
  402.  
  403.  
  404.           You can also use a procedure declaration to specify the
  405.           creation function for a user-defined widget.  In this case,
  406.           you specify no formal parameters.  The procedure is invoked
  407.           with the standard three arguments passed to all widget
  408.           creation functions.  (See the Motif Toolkit documentation
  409.           for more information about widget creation functions.)
  410.  
  411.         LLLLiiiisssstttt sssseeeeccccttttiiiioooonnnnssss
  412.           A list section consists of the keyword LLLLIIIISSSSTTTT followed by a
  413.           sequence of list declarations.  It has the following syntax:
  414.  
  415.           LLLLIIIISSSSTTTT
  416.                _l_i_s_t__n_a_m_e :::: {{{{ _l_i_s_t__i_t_e_m;;;; [...] }}}}
  417.                [...]
  418.  
  419.           You can also use list sections to group together a set of
  420.           arguments, controls (children), callbacks, or procedures for
  421.           later use in the UIL module.  Lists can contain other lists,
  422.           so that you can set up a hierarchy to clearly show which
  423.           arguments, controls, callbacks, and procedures are common to
  424.           which widgets.  You cannot mix the different types of lists;
  425.           a list of a particular type cannot contain entries of a
  426.           different list type or reference the name of a different
  427.           list type.  A list name is always private to the UIL module
  428.           in which you declare the list and cannot be stored as a
  429.           named resource in a UID file.
  430.  
  431.           The additional list types are described in the following
  432.           sections.
  433.  
  434.           AAAArrrrgggguuuummmmeeeennnnttttssss LLLLiiiisssstttt SSSSttttrrrruuuuccccttttuuuurrrreeee
  435.  
  436.           An arguments list defines which arguments are to be
  437.           specified in the arguments-list parameter when the creation
  438.           routine for a particular object is called at run time. An
  439.           arguments list also specifies the values for those
  440.           arguments.  Argument lists have the following syntax:
  441.  
  442.           LLLLIIIISSSSTTTT
  443.                _l_i_s_t__n_a_m_e :::: AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS {{{{
  444.                     _a_r_g_u_m_e_n_t__n_a_m_e ==== _v_a_l_u_e__e_x_p_r_e_s_s_i_o_n;;;;
  445.                     [...] }}}}
  446.                [...]
  447.  
  448.           The argument name must be either a built-in argument name or
  449.           a user-defined argument name that is specified with the
  450.           AAAARRRRGGGGUUUUMMMMEEEENNNNTTTT function.
  451.  
  452.           If you use a built-in argument name as an arguments list
  453.           entry in an object definition, the UIL compiler checks the
  454.           argument name to be sure that it is supported by the type of
  455.           object that you are defining.  If the same argument name
  456.  
  457.  
  458.  
  459.      Page 7                                          (printed 4/30/98)
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  467.  
  468.  
  469.  
  470.           appears more than once in a given arguments list, the last
  471.           entry that uses that argument name supersedes all previous
  472.           entries with that name, and the compiler issues a message.
  473.  
  474.           Some arguments, such as XXXXmmmmNNNNiiiitttteeeemmmmssss and XXXXmmmmNNNNiiiitttteeeemmmmCCCCoooouuuunnnntttt, are
  475.           coupled by the UIL compiler. When you specify one of the
  476.           arguments, the compiler also sets the other.  The coupled
  477.           argument is not available to you.
  478.  
  479.           The Motif Toolkit and the X Toolkit (intrinsics) support
  480.           constraint arguments.  A constraint argument is one that is
  481.           passed to children of an object, beyond those arguments
  482.           normally available.  For example, the Form widget grants a
  483.           set of constraint arguments to its children.  These
  484.           arguments control the position of the children within the
  485.           Form.
  486.  
  487.           Unlike the arguments used to define the attributes of a
  488.           particular widget, constraint arguments are used exclusively
  489.           to define additional attributes of the children of a
  490.           particular widget.  These attributes affect the behavior of
  491.           the children within their parent.  To supply constraint
  492.           arguments to the children, you include the arguments in the
  493.           arguments list for the child.
  494.  
  495.           See _A_p_p_e_n_d_i_x _B for information about which arguments are
  496.           supported by which widgets.  See _A_p_p_e_n_d_i_x _C for information
  497.           about what the valid value type is for each built-in
  498.           argument.
  499.  
  500.           CCCCaaaallllllllbbbbaaaacccckkkkssss LLLLiiiisssstttt SSSSttttrrrruuuuccccttttuuuurrrreeee
  501.  
  502.           Use a callbacks list to define which callback reasons are to
  503.           be processed by a particular widget at run time.  Callback
  504.           lists have the following syntax:
  505.  
  506.           LLLLIIIISSSSTTTT
  507.                _l_i_s_t__n_a_m_e :::: CCCCAAAALLLLLLLLBBBBAAAACCCCKKKKSSSS {{{{
  508.                     _r_e_a_s_o_n__n_a_m_e ==== PPPPRRRROOOOCCCCEEEEDDDDUUUURRRREEEE _p_r_o_c_e_d_u_r_e__n_a_m_e [[[[ (((( [ _v_a_l_u_e__e_x_p_r_e_s_s_i_o_n ] )))) ];;;; |
  509.                     _r_e_a_s_o_n__n_a_m_e ==== _p_r_o_c_e_d_u_r_e__l_i_s_t ;;;;
  510.                     [...] }}}}
  511.                [...]
  512.  
  513.           For Motif Toolkit widgets, the reason name must be a built-
  514.           in reason name.  For a user-defined widget, you can use a
  515.           reason name that you previously specified using the RRRREEEEAAAASSSSOOOONNNN
  516.           function.  If you use a built-in reason in an object
  517.           definition, the UIL compiler ensures that reason is
  518.           supported by the type of object you are defining.  Appendix
  519.           B shows which reasons each object supports.
  520.  
  521.           If the same reason appears more than once in a callbacks
  522.  
  523.  
  524.  
  525.      Page 8                                          (printed 4/30/98)
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  533.  
  534.  
  535.  
  536.           list, the last entry referring to that name supersedes all
  537.           previous entries using the same reason, and the UIL compiler
  538.           issues a diagnostic message.
  539.  
  540.           If you specify a named value for the procedure argument
  541.           (callback tag), the data type of the value must match the
  542.           type specified for the callback tag in the corresponding
  543.           procedure declaration.  When specifying a widget name as a
  544.           procedure value expression you must also specify the type of
  545.           the widget and a space before the name of the widget.
  546.  
  547.           Because the UIL compiler produces a UID file rather than an
  548.           object module (.o), the binding of the UIL name to the
  549.           address of the entry point to the procedure is not done by
  550.           the loader, but is established at run time with the MRM
  551.           function MMMMrrrrmmmmRRRReeeeggggiiiisssstttteeeerrrrNNNNaaaammmmeeeessss.  You call this function before
  552.           fetching any objects, giving it both the UIL names and the
  553.           procedure addresses of each callback.  The name you register
  554.           with MRM in the application program must match the name you
  555.           specified for the procedure in the UIL module.
  556.  
  557.           Each callback procedure receives three arguments.  The first
  558.           two arguments have the same form for each callback.  The
  559.           form of the third argument varies from object to object.
  560.  
  561.           The first argument is the address of the data structure
  562.           maintained by the Motif Toolkit for this object instance.
  563.           This address is called the widget ID for this object.
  564.  
  565.           The second argument is the address of the value you
  566.           specified in the callbacks list for this procedure. If you
  567.           do not specify an argument, the address is NULL.
  568.  
  569.           The third argument is the reason name you specified in the
  570.           callbacks list.
  571.  
  572.           CCCCoooonnnnttttrrrroooollllssss LLLLiiiisssstttt SSSSttttrrrruuuuccccttttuuuurrrreeee
  573.  
  574.           A controls list defines which objects are children of, or
  575.           controlled by, a particular object.  Each entry in a
  576.           controls list has the following syntax:
  577.  
  578.           LLLLIIIISSSSTTTT
  579.                _l_i_s_t__n_a_m_e :::: CCCCOOOONNNNTTTTRRRROOOOLLLLSSSS {{{{
  580.                     [_c_h_i_l_d__n_a_m_e] [MMMMAAAANNNNAAAAGGGGEEEEDDDD | UUUUNNNNMMMMAAAANNNNAAAAGGGGEEEEDDDD] _o_b_j_e_c_t__d_e_f_i_n_i_t_i_o_n;;;;
  581.                     [...] }}}}
  582.                [...]
  583.  
  584.           If you specify the keyword MMMMAAAANNNNAAAAGGGGEEEEDDDD at run time, the object
  585.           is created and managed; if you specify UUUUNNNNMMMMAAAANNNNAAAAGGGGEEEEDDDD at run
  586.           time, the object is only created.  Objects are managed by
  587.           default.
  588.  
  589.  
  590.  
  591.      Page 9                                          (printed 4/30/98)
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  599.  
  600.  
  601.  
  602.           You can use _c_h_i_l_d__n_a_m_e to specify resources for the
  603.           automatically created children of a particular control.
  604.           Names for automatically created children are formed by
  605.           appending XXXXmmmm____ to the name of the child widget.  This name is
  606.           specified in the documentation for the parent widget.
  607.  
  608.           Unlike the arguments list and the callbacks list, a controls
  609.           list entry that is identical to a previous entry does not
  610.           supersede the previous entry.  At run time, each controls
  611.           list entry causes a child to be created when the parent is
  612.           created.  If the same object definition is used for multiple
  613.           children, multiple instances of the child are created at run
  614.           time. See _A_p_p_e_n_d_i_x _B for a list of which widget types can be
  615.           controlled by which other widget types.
  616.  
  617.           PPPPrrrroooocccceeeedddduuuurrrreeeessss LLLLiiiisssstttt SSSSttttrrrruuuuccccttttuuuurrrreeee
  618.  
  619.           You can specify multiple procedures for a callback reason in
  620.           UIL by defining a procedures list.  Just as with other list
  621.           types, procedures lists can be defined in-line or in a list
  622.           section and referenced by name.
  623.  
  624.           If you define a reason more than once (for example, when the
  625.           reason is defined both in a referenced procedures list and
  626.           in the callbacks list for the object), previous definitions
  627.           are overridden by the latest definition.  The syntax for a
  628.           procedures list is as follows:
  629.  
  630.           LLLLIIIISSSSTTTT
  631.                _l_i_s_t__n_a_m_e :::: PPPPRRRROOOOCCCCEEEEDDDDUUUURRRREEEESSSS {{{{
  632.                     _p_r_o_c_e_d_u_r_e__n_a_m_e [[[[ (((( [ _v_a_l_u_e__e_x_p_r_e_s_s_i_o_n ] )))) ];;;;
  633.                     [...] }}}}
  634.                [...]
  635.  
  636.           When specifying a widget name as a procedure value
  637.           expression you must also specify the type of the widget and
  638.           a space before the name of the widget.
  639.  
  640.         OOOObbbbjjjjeeeecccctttt SSSSeeeeccccttttiiiioooonnnnssss
  641.           An object section consists of the keyword OOOOBBBBJJJJEEEECCCCTTTT followed by
  642.           a sequence of object declarations.  It has the following
  643.           syntax:
  644.  
  645.           OOOOBBBBJJJJEEEECCCCTTTT _o_b_j_e_c_t__n_a_m_e ::::
  646.                [ EEEEXXXXPPPPOOOORRRRTTTTEEEEDDDD | PPPPRRRRIIIIVVVVAAAATTTTEEEE | IIIIMMMMPPPPOOOORRRRTTTTEEEEDDDD ] _o_b_j_e_c_t__t_y_p_e
  647.                     [ PPPPRRRROOOOCCCCEEEEDDDDUUUURRRREEEE _c_r_e_a_t_i_o_n__f_u_n_c_t_i_o_n ]]]]
  648.                     [[[[ _o_b_j_e_c_t__n_a_m_e [ WWWWIIIIDDDDGGGGEEEETTTT | GGGGAAAADDDDGGGGEEEETTTT ] | {{{{ _l_i_s_t__d_e_f_i_n_i_t_i_o_n_s }}}} ]
  649.  
  650.           Use an object declaration to define the objects that are to
  651.           be stored in the UID file.  You can reference the object
  652.           name in declarations that occur elsewhere in the UIL module
  653.           in any context where an object name can be used (for
  654.  
  655.  
  656.  
  657.      Page 10                                         (printed 4/30/98)
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  665.  
  666.  
  667.  
  668.           example, in a controls list, as a symbolic reference to a
  669.           widget ID, or as the tag_value argument for a callback
  670.           procedure). Objects can be forward referenced; that is, you
  671.           can declare an object name after you reference it.  All
  672.           references to an object name must be consistent with the
  673.           type of the object, as specified in the object declaration.
  674.           You can specify an object as exported, imported, or private.
  675.  
  676.           The object definition can contain a sequence of lists that
  677.           define the arguments, hierarchy, and callbacks for the
  678.           widget. You can specify only one list of each type for an
  679.           object.  When you declare a user-defined widget, you must
  680.           include a reference to the widget creation function for the
  681.           user-defined widget.
  682.  
  683.           Use the GGGGAAAADDDDGGGGEEEETTTT or WWWWIIIIDDDDGGGGEEEETTTT keyword to specify the object type
  684.           or to override the default variant for this object type.
  685.           You can use the Motif Toolkit name of an object type that
  686.           has a gadget variant (for example, XXXXmmmmLLLLaaaabbbbeeeellllGGGGaaaaddddggggeeeetttt) as an
  687.           attribute of an object declaration.  The _o_b_j_e_c_t__t_y_p_e can be
  688.           any object type, including gadgets.  You need to specify the
  689.           GGGGAAAADDDDGGGGEEEETTTT or WWWWIIIIDDDDGGGGEEEETTTT keyword only in the declaration of an
  690.           object, not when you reference the object.  You cannot
  691.           specify the GGGGAAAADDDDGGGGEEEETTTT or WWWWIIIIDDDDGGGGEEEETTTT keyword for a user-defined
  692.           object; user-defined objects are always widgets.
  693.  
  694.         IIIIddddeeeennnnttttiiiiffffiiiieeeerrrr sssseeeeccccttttiiiioooonnnnssss
  695.           The identifier section allows you to define an identifier, a
  696.           mechanism that achieves run-time binding of data to names
  697.           that appear in a UIL module. The identifier section consists
  698.           of the reserved keyword IIIIDDDDEEEENNNNTTTTIIIIFFFFIIIIEEEERRRR, followed by a list of
  699.           names, each name followed by a semicolon.
  700.  
  701.           IIIIDDDDEEEENNNNTTTTIIIIFFFFIIIIEEEERRRR _i_d_e_n_t_i_f_i_e_r__n_a_m_e;;;; [...;;;;]
  702.  
  703.           You can later use these names in the UIL module as either
  704.           the value of an argument to a widget or the tag value to a
  705.           callback procedure. At run time, you use the MRM functions
  706.           MMMMrrrrmmmmRRRReeeeggggiiiisssstttteeeerrrrNNNNaaaammmmeeeessss and MMMMrrrrmmmmRRRReeeeggggiiiisssstttteeeerrrrNNNNaaaammmmeeeessssIIIInnnnHHHHiiiieeeerrrraaaarrrrcccchhhhyyyy to bind the
  707.           identifier name with the data (or, in the case of callbacks,
  708.           with the address of the data) associated with the
  709.           identifier.
  710.  
  711.           Each UIL module has a single name space; therefore, you
  712.           cannot use a name you used for a value, object, or procedure
  713.           as an identifier name in the same module.
  714.  
  715.           The UIL compiler does not do any type checking on the use of
  716.           identifiers in a UIL module.  Unlike a UIL value, an
  717.           identifier does not have a UIL type associated with it.
  718.           Regardless of what particular type a widget argument or
  719.           callback procedure tag is defined to be, you can use an
  720.  
  721.  
  722.  
  723.      Page 11                                         (printed 4/30/98)
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  731.  
  732.  
  733.  
  734.           identifier in that context instead of a value of the
  735.           corresponding type.
  736.  
  737.           To reference these identifier names in a UIL module, you use
  738.           the name of the identifier wherever you want its value to be
  739.           used.
  740.  
  741.         IIIInnnncccclllluuuuddddeeee ddddiiiirrrreeeeccccttttiiiivvvveeeessss
  742.           The include directive incorporates the contents of a
  743.           specified file into a UIL module.  This mechanism allows
  744.           several UIL modules to share common definitions.  The syntax
  745.           for the include directive is as follows:
  746.  
  747.           IIIINNNNCCCCLLLLUUUUDDDDEEEE FFFFIIIILLLLEEEE _f_i_l_e__n_a_m_e ;
  748.  
  749.           The UIL compiler replaces the include directive with the
  750.           contents of the include file and processes it as if these
  751.           contents had appeared in the current UIL source file.
  752.  
  753.           You can nest include files; that is, an include file can
  754.           contain include directives.  The UIL compiler can process up
  755.           to 100 references (including the file containing the UIL
  756.           module).  Therefore, you can include up to 99 files in a
  757.           single UIL module, including nested files.  Each time a file
  758.           is opened counts as a reference, so including the same file
  759.           twice counts as two references.
  760.  
  761.           The character expression is a file specification that
  762.           identifies the file to be included.  The rules for finding
  763.           the specified file are similar to the rules for finding
  764.           header, or ....hhhh files using the include directive, ####iiiinnnncccclllluuuuddddeeee,
  765.           with a quoted string in C.  The uuuuiiiillll uses the ----IIII option for
  766.           specifying a search directory for include files.
  767.  
  768.  
  769.             +o  If you do not supply a directory, the UIL compiler
  770.                searches for the include file in the directory of the
  771.                main source file.
  772.  
  773.             +o  If the compiler does not find the include file there,
  774.                the compiler looks in the same directory as the source
  775.                file.
  776.  
  777.             +o  If you supply a directory, the UIL compiler searches
  778.                only that directory for the file.
  779.  
  780.  
  781.      LLLLAAAANNNNGGGGUUUUAAAAGGGGEEEE SSSSYYYYNNNNTTTTAAAAXXXX
  782.         NNNNaaaammmmeeeessss aaaannnndddd SSSSttttrrrriiiinnnnggggssss
  783.           Names can consist of any of the characters A to Z, a to z, 0
  784.           to 9, $ (dollar sign), and _ (underscore).  Names cannot
  785.           begin with a digit (0 to 9).  The maximum length of a name
  786.  
  787.  
  788.  
  789.      Page 12                                         (printed 4/30/98)
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  797.  
  798.  
  799.  
  800.           is 31 characters.
  801.  
  802.           UIL gives you a choice of either case-sensitive or case-
  803.           insensitive names through a clause in the MMMMOOOODDDDUUUULLLLEEEE header.
  804.           For example, if names are case sensitive, the names "sample"
  805.           and "Sample" are distinct from each other.  If names are
  806.           case insensitive, these names are treated as the same name
  807.           and can be used interchangeably.  By default, UIL assumes
  808.           names are case sensitive.
  809.  
  810.           In CCCCAAAASSSSEEEE----IIIINNNNSSSSEEEENNNNSSSSIIIITTTTIIIIVVVVEEEE mode, the compiler outputs all names in
  811.           the UID file in uppercase form.  In CCCCAAAASSSSEEEE----SSSSEEEENNNNSSSSIIIITTTTIIIIVVVVEEEE mode,
  812.           names appear in the UIL file exactly as they appear in the
  813.           source.
  814.  
  815.           The following table list the reserved keywords, which are
  816.           not available for defining programmer defined names.
  817.  
  818.                  AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS    CCCCAAAALLLLLLLLBBBBAAAACCCCKKKKSSSS   CCCCOOOONNNNTTTTRRRROOOOLLLLSSSS   EEEENNNNDDDD
  819.                  EEEEXXXXPPPPOOOORRRRTTTTEEEEDDDD     FFFFAAAALLLLSSSSEEEE       GGGGAAAADDDDGGGGEEEETTTT     IIIIDDDDEEEENNNNTTTTIIIIFFFFIIIIEEEERRRR
  820.                  IIIINNNNCCCCLLLLUUUUDDDDEEEE      LLLLIIIISSSSTTTT        MMMMOOOODDDDUUUULLLLEEEE     OOOOFFFFFFFF
  821.                  OOOONNNN           OOOOBBBBJJJJEEEECCCCTTTT      PPPPRRRRIIIIVVVVAAAATTTTEEEE    PPPPRRRROOOOCCCCEEEEDDDDUUUURRRREEEE
  822.                  PPPPRRRROOOOCCCCEEEEDDDDUUUURRRREEEESSSS   TTTTRRRRUUUUEEEE        VVVVAAAALLLLUUUUEEEE      WWWWIIIIDDDDGGGGEEEETTTT
  823.  
  824.           The following table list the UIL unreserved keywords.  These
  825.           keywords can be used as programmer defined names, however,
  826.           if you use any keyword as a name, you cannot use the UIL-
  827.           supplied usage of that keyword.
  828.  
  829.      Built-in argument names (for example: XXXXmmmmNNNNxxxx, XXXXmmmmNNNNhhhheeeeiiiigggghhhhtttt)
  830.      Built-in reason names (for example: XXXXmmmmNNNNaaaaccccttttiiiivvvvaaaatttteeeeCCCCaaaallllllllbbbbaaaacccckkkk, XXXXmmmmNNNNhhhheeeellllppppCCCCaaaallllllllbbbbaaaacccckkkk)
  831.      Character set names (for example: IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN1111, IIIISSSSOOOO____HHHHEEEEBBBBRRRREEEEWWWW____LLLLRRRR)
  832.      Constant value names (for example: XXXXmmmmMMMMEEEENNNNUUUU____OOOOPPPPTTTTIIIIOOOONNNN, XXXXmmmmBBBBRRRROOOOWWWWSSSSEEEE____SSSSEEEELLLLEEEECCCCTTTT)
  833.      Object types (for example: XXXXmmmmPPPPuuuusssshhhhBBBBuuuuttttttttoooonnnn, XXXXmmmmBBBBuuuulllllllleeeettttiiiinnnnBBBBooooaaaarrrrdddd)
  834.      AAAANNNNYYYY                            AAAARRRRGGGGUUUUMMMMEEEENNNNTTTT                AAAASSSSCCCCIIIIZZZZ____SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE
  835.      AAAASSSSCCCCIIIIZZZZ____TTTTAAAABBBBLLLLEEEE                    BBBBAAAACCCCKKKKGGGGRRRROOOOUUUUNNNNDDDD              BBBBOOOOOOOOLLLLEEEEAAAANNNN
  836.      CCCCAAAASSSSEEEE____IIIINNNNSSSSEEEENNNNSSSSIIIITTTTIIIIVVVVEEEE               CCCCAAAASSSSEEEE____SSSSEEEENNNNSSSSIIIITTTTIIIIVVVVEEEE          CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT
  837.      CCCCOOOOLLLLOOOORRRR                          CCCCOOOOLLLLOOOORRRR____TTTTAAAABBBBLLLLEEEE             CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG
  838.      CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE          FFFFIIIILLLLEEEE                    FFFFLLLLOOOOAAAATTTT
  839.      FFFFOOOONNNNTTTT                           FFFFOOOONNNNTTTT____TTTTAAAABBBBLLLLEEEE              FFFFOOOONNNNTTTTSSSSEEEETTTT
  840.      FFFFOOOORRRREEEEGGGGRRRROOOOUUUUNNNNDDDD                     IIIICCCCOOOONNNN                    IIIIMMMMPPPPOOOORRRRTTTTEEEEDDDD
  841.      IIIINNNNTTTTEEEEGGGGEEEERRRR                        IIIINNNNTTTTEEEEGGGGEEEERRRR____TTTTAAAABBBBLLLLEEEE           KKKKEEEEYYYYSSSSYYYYMMMM
  842.      MMMMAAAANNNNAAAAGGGGEEEEDDDD                        NNNNAAAAMMMMEEEESSSS                   OOOOBBBBJJJJEEEECCCCTTTTSSSS
  843.      RRRREEEEAAAASSSSOOOONNNN                         RRRRGGGGBBBB                     RRRRIIIIGGGGHHHHTTTT____TTTTOOOO____LLLLEEEEFFFFTTTT
  844.      SSSSIIIINNNNGGGGLLLLEEEE____FFFFLLLLOOOOAAAATTTT                   SSSSTTTTRRRRIIIINNNNGGGG                  SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE
  845.      TTTTRRRRAAAANNNNSSSSLLLLAAAATTTTIIIIOOOONNNN____TTTTAAAABBBBLLLLEEEE              UUUUNNNNMMMMAAAANNNNAAAAGGGGEEEEDDDD               UUUUSSSSEEEERRRR____DDDDEEEEFFFFIIIINNNNEEEEDDDD
  846.      VVVVEEEERRRRSSSSIIIIOOOONNNN                        WWWWIIIIDDDDEEEE____CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR          WWWWIIIIDDDDGGGGEEEETTTT
  847.      XXXXBBBBIIIITTTTMMMMAAAAPPPPFFFFIIIILLLLEEEE
  848.  
  849.           String literals can be composed of the upper- and lower-case
  850.           letters, digits, and punctuation characters.  Spaces, tabs,
  851.           and comments are special elements in the language.  They are
  852.  
  853.  
  854.  
  855.      Page 13                                         (printed 4/30/98)
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  863.  
  864.  
  865.  
  866.           a means of delimiting other elements, such as two names.
  867.           One or more of these elements can appear before or after any
  868.           other element in the language.  However, spaces, tabs, and
  869.           comments that appear in string literals are treated as
  870.           character sequences rather than delimiters.
  871.  
  872.         DDDDaaaattttaaaa TTTTyyyyppppeeeessss
  873.           UIL provides literals for several of the value types it
  874.           supports.  Some of the value types are not supported as
  875.           literals (for example, pixmaps and string tables).  You can
  876.           specify values for these types by using functions described
  877.           in the _F_u_n_c_t_i_o_n_s section.  UIL directly supports the
  878.           following literal types:
  879.  
  880.  
  881.             +o  String literal
  882.  
  883.             +o  Integer literal
  884.  
  885.             +o  Boolean literal
  886.  
  887.             +o  Floating-point literal
  888.  
  889.  
  890.           UIL also includes the data type AAAANNNNYYYY, which is used to turn
  891.           off compile time checking of data types.
  892.  
  893.         SSSSttttrrrriiiinnnngggg LLLLiiiitttteeeerrrraaaallllssss
  894.           A string literal is a sequence of zero or more 8-bit or 16-
  895.           bit characters or a combination delimited by '''' (single
  896.           quotation marks) or """" (double quotation marks).  String
  897.           literals can also contain multibyte characters delimited
  898.           with double quotation marks.  String literals can be no more
  899.           than 2000 characters long.
  900.  
  901.           A single-quoted string literal can span multiple source
  902.           lines.  To continue a single-quoted string literal,
  903.           terminate the continued line with a \\\\ (backslash).  The
  904.           literal continues with the first character on the next line.
  905.  
  906.           Double-quoted string literals cannot span multiple source
  907.           lines.  (Because double-quoted strings can contain escape
  908.           sequences and other special characters, you cannot use the
  909.           backslash character to designate continuation of the
  910.           string.)  To build a string value that must span multiple
  911.           source lines, use the concatenation operator described later
  912.           in this section.
  913.  
  914.           The syntax of a string literal is one of the following:
  915.  
  916.           ''''[_c_h_a_r_a_c_t_e_r__s_t_r_i_n_g]''''
  917.           [####_c_h_a_r__s_e_t]""""[_c_h_a_r_a_c_t_e_r__s_t_r_i_n_g]""""
  918.  
  919.  
  920.  
  921.      Page 14                                         (printed 4/30/98)
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  929.  
  930.  
  931.  
  932.           Both string forms associate a character set with a string
  933.           value.  UIL uses the following rules to determine the
  934.           character set and storage format for string literals:
  935.  
  936.  
  937.             +o  A string declared as ''''_s_t_r_i_n_g'''' is equivalent to
  938.                ####_c_u_r__c_h_a_r_s_e_t""""_s_t_r_i_n_g"""", where _c_u_r__c_h_a_r_s_e_t will be the
  939.                codeset portion of the value of the LLLLAAAANNNNGGGG environment
  940.                variable if it is set or the value of
  941.                XXXXmmmmFFFFAAAALLLLLLLLBBBBAAAACCCCKKKK____CCCCHHHHAAAARRRRSSSSEEEETTTT if LLLLAAAANNNNGGGG is not set or has no codeset
  942.                component.  By default XXXXmmmmFFFFAAAALLLLLLLLBBBBAAAACCCCKKKK____CCCCHHHHAAAARRRRSSSSEEEETTTT is IIIISSSSOOOO8888888855559999----1111
  943.                (equivalent to IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN1111), but vendors may define a
  944.                different default.
  945.  
  946.             +o  A string declared as """"_s_t_r_i_n_g"""" is equivalent to
  947.                ####_c_h_a_r__s_e_t""""_s_t_r_i_n_g"""" if you specified _c_h_a_r__s_e_t as the
  948.                default character set for the module.  If no default
  949.                character set has been specified for the module, then
  950.                if the ----ssss option is provided to the uuuuiiiillll command or the
  951.                uuuusssseeee____sssseeeettttllllooooccccaaaalllleeee____ffffllllaaaagggg is set for the callable compiler,
  952.                UUUUiiiillll(((()))), the string will be interpreted to be a string in
  953.                the current locale.  This means that the string is
  954.                parsed in the locale of the user by calling sssseeeettttllllooooccccaaaalllleeee
  955.                and its charset is XXXXmmmmFFFFOOOONNNNTTTTLLLLIIIISSSSTTTT____DDDDEEEEFFFFAAAAUUUULLLLTTTT____TTTTAAAAGGGG, and that if
  956.                the string is converted to a compound string, it is
  957.                stored as a locale encoded text segment.  Otherwise,
  958.                """"_s_t_r_i_n_g"""" is equivalent to ####_c_u_r__c_h_a_r_s_e_t""""_s_t_r_i_n_g"""", where
  959.                _c_u_r__c_h_a_r_s_e_t is interpreted as described for single
  960.                quoted strings.
  961.  
  962.             +o  A string of the form """"_s_t_r_i_n_g"""" or ####_c_h_a_r__s_e_t""""_s_t_r_i_n_g"""" is
  963.                stored as a null-terminated string.
  964.  
  965.  
  966.           The following table lists the character sets supported by
  967.           the UIL compiler for string literals.  Note that several UIL
  968.           names map to the same character set.  In some cases, the UIL
  969.           name influences how string literals are read.  For example,
  970.           strings identified by a UIL character set name ending in _LR
  971.           are read left-to-right.  Names that end in a different
  972.           number reflect different fonts (for example, ISO_LATIN1 or
  973.           ISO_LATIN6).  All character sets in this table are
  974.           represented by 8 bits.
  975.  
  976.           UUUUIIIILLLL NNNNaaaammmmeeee        DDDDeeeessssccccrrrriiiippppttttiiiioooonnnn
  977.           IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN1111      GL: ASCII, GR: Latin-1 Supplement
  978.           IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN2222      GL: ASCII, GR: Latin-2 Supplement
  979.           IIIISSSSOOOO____AAAARRRRAAAABBBBIIIICCCC      GL: ASCII, GR: Latin-Arabic Supplement
  980.           IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN6666      GL: ASCII, GR: Latin-Arabic Supplement
  981.           IIIISSSSOOOO____GGGGRRRREEEEEEEEKKKK       GL: ASCII, GR: Latin-Greek Supplement
  982.  
  983.  
  984.  
  985.  
  986.  
  987.      Page 15                                         (printed 4/30/98)
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  995.  
  996.  
  997.  
  998.           IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN7777      GL: ASCII, GR: Latin-Greek Supplement
  999.           IIIISSSSOOOO____HHHHEEEEBBBBRRRREEEEWWWW      GL: ASCII, GR: Latin-Hebrew Supplement
  1000.           IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN8888      GL: ASCII, GR: Latin-Hebrew Supplement
  1001.           IIIISSSSOOOO____HHHHEEEEBBBBRRRREEEEWWWW____LLLLRRRR   GL: ASCII, GR: Latin-Hebrew Supplement
  1002.           IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN8888____LLLLRRRR   GL: ASCII, GR: Latin-Hebrew Supplement
  1003.           JJJJIIIISSSS____KKKKAAAATTTTAAAAKKKKAAAANNNNAAAA    GL: JIS Roman, GR: JIS Katakana
  1004.  
  1005.           Following are the parsing rules for each of the character
  1006.           sets:
  1007.  
  1008.  
  1009.           All character sets
  1010.                Character codes in the range 00...1F, 7F, and 80...9F
  1011.                are control characters including both bytes of 16-bit
  1012.                characters. The compiler flags these as illegal
  1013.                characters.
  1014.  
  1015.           IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN1111 IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN2222 IIIISSSSOOOO____AAAARRRRAAAABBBBIIIICCCC IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN3333 IIIISSSSOOOO____GGGGRRRREEEEEEEEKKKK
  1016.                IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN4444
  1017.                These sets are parsed from left to right. The escape
  1018.                sequences for null-terminated strings are also
  1019.                supported by these character sets.
  1020.  
  1021.           IIIISSSSOOOO____HHHHEEEEBBBBRRRREEEEWWWW IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN8888
  1022.                These sets are parsed from right to left; for example,
  1023.                the string ####IIIISSSSOOOO____HHHHEEEEBBBBRRRREEEEWWWW""""000011112222333344445555"""" generates a primitive
  1024.                string "543210" with character set IIIISSSSOOOO____HHHHEEEEBBBBRRRREEEEWWWW. A DDIS
  1025.                descriptor for such a string has this segment marked as
  1026.                being right_to_left.  The escape sequences for null-
  1027.                terminated strings are also supported by these
  1028.                character sets, and the characters that compose the
  1029.                escape sequences are in left-to-right order.  For
  1030.                example, you type \n, not n\.
  1031.  
  1032.           IIIISSSSOOOO____HHHHEEEEBBBBRRRREEEEWWWW____LLLLRRRR IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN8888____LLLLRRRR
  1033.                These sets are parsed from left to right; for example,
  1034.                the string ####IIIISSSSOOOO____HHHHEEEEBBBBRRRREEEEWWWW____LLLLRRRR""""000011112222333344445555"""" generates a primitive
  1035.                string "012345" with character set IIIISSSSOOOO____HHHHEEEEBBBBRRRREEEEWWWW.  A DDIS
  1036.                descriptor for such a string marks this segment as
  1037.                being left_to_right.  The escape sequences for null-
  1038.                terminated strings are also supported by these
  1039.                character sets.
  1040.  
  1041.           JJJJIIIISSSS____KKKKAAAATTTTAAAAKKKKAAAANNNNAAAA
  1042.                This set is parsed from left to right.  The escape
  1043.                sequences for null-terminated strings are also
  1044.                supported by this character set.  Note that the \\\\
  1045.                (backslash) may be displayed as a yen symbol.
  1046.  
  1047.  
  1048.           In addition to designating parsing rules for strings,
  1049.           character set information remains an attribute of a compound
  1050.  
  1051.  
  1052.  
  1053.      Page 16                                         (printed 4/30/98)
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1061.  
  1062.  
  1063.  
  1064.           string. If the string is included in a string consisting of
  1065.           several concatenated segments, the character set information
  1066.           is included with that string segment.  This gives the Motif
  1067.           Toolkit the information it needs to decipher the compound
  1068.           string and choose a font to display the string.
  1069.  
  1070.           For an application interface displayed only in English, UIL
  1071.           lets you ignore the distinctions between the two uses of
  1072.           strings. The compiler recognizes by context when a string
  1073.           must be passed as a null-terminated string or as a compound
  1074.           string.
  1075.  
  1076.           The UIL compiler recognizes enough about the various
  1077.           character sets to correctly parse string literals. The
  1078.           compiler also issues errors if you use a compound string in
  1079.           a context that supports only null-terminated strings.
  1080.  
  1081.           Since the character set names are keywords, you must put
  1082.           them in lowercase if case-sensitive names are in force.  If
  1083.           names are case insensitive, character set names can be
  1084.           uppercase, lowercase, or mixed case.
  1085.  
  1086.           In addition to the built-in character sets recognized by
  1087.           UIL, you can define your own character sets with the
  1088.           CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT function.  You can use the CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT
  1089.           function anywhere a character set can be specified.
  1090.  
  1091.           String literals can contain characters with the eighth
  1092.           (high-order) bit set.  You cannot type control characters
  1093.           (00..1F, 7F, and 80..9F) directly in a single-quoted string
  1094.           literal.  However, you can represent these characters with
  1095.           escape sequences.  The following list shows the escape
  1096.           sequences for special characters.
  1097.  
  1098.  
  1099.           \\\\bbbb        Backspace
  1100.  
  1101.           \\\\ffff        Form-feed
  1102.  
  1103.           \\\\nnnn        Newline
  1104.  
  1105.           \\\\rrrr        Carriage return
  1106.  
  1107.           \\\\tttt        Horizontal tab
  1108.  
  1109.           \\\\vvvv        Vertical tab
  1110.  
  1111.           \\\\''''        Single quotation mark
  1112.  
  1113.           \\\\""""        Double quotation mark
  1114.  
  1115.           \\\\\\\\        Backslash
  1116.  
  1117.  
  1118.  
  1119.      Page 17                                         (printed 4/30/98)
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1127.  
  1128.  
  1129.  
  1130.           \\\\_i_n_t_e_g_e_r\\\\ Character whose internal representation is given
  1131.                     by _i_n_t_e_g_e_r (in the range 0 to 255 decimal)
  1132.  
  1133.  
  1134.           Note that escape sequences are processed literally in
  1135.           strings that are parsed in the current locale (localized
  1136.           strings).
  1137.  
  1138.           The UIL compiler does not process newline characters in
  1139.           compound strings.  The effect of a newline character in a
  1140.           compound string depends only on the character set of the
  1141.           string, and the result is not guaranteed to be a multiline
  1142.           string.
  1143.  
  1144.           CCCCoooommmmppppoooouuuunnnndddd SSSSttttrrrriiiinnnngggg LLLLiiiitttteeeerrrraaaallllssss
  1145.  
  1146.           A compound string consists of a string of 8-bit, 16-bit, or
  1147.           multibyte characters, a named character set, and a writing
  1148.           direction.  Its UIL data type is ccccoooommmmppppoooouuuunnnndddd____ssssttttrrrriiiinnnngggg.
  1149.  
  1150.           The writing direction of a compound string is implied by the
  1151.           character set specified for the string.  You can explicitly
  1152.           set the writing direction for a compound string by using the
  1153.           CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG function.
  1154.  
  1155.           A compound string can consist of a sequence of concatenated
  1156.           compound strings, null-terminated strings, or a combination
  1157.           of both, each of which can have a different character set
  1158.           property and writing direction.  Use the concatenation
  1159.           operator &&&& (ampersand) to create a sequence of compound
  1160.           strings.
  1161.  
  1162.           Each string in the sequence is stored, including the
  1163.           character set and writing direction information.
  1164.  
  1165.           Generally, a string literal is stored in the UID file as a
  1166.           compound string when the literal consists of concatenated
  1167.           strings having different character sets or writing
  1168.           directions, or when you use the string to specify a value
  1169.           for an argument that requires a compound string value.  If
  1170.           you want to guarantee that a string literal is stored as a
  1171.           compound string, you must use the CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG function.
  1172.  
  1173.           DDDDaaaattttaaaa SSSSttttoooorrrraaaaggggeeee CCCCoooonnnnssssuuuummmmppppttttiiiioooonnnn ffffoooorrrr SSSSttttrrrriiiinnnngggg LLLLiiiitttteeeerrrraaaallllssss
  1174.  
  1175.           The way a string literal is stored in the UID file depends
  1176.           on how you declare and use the string.  The UIL compiler
  1177.           automatically converts a null-terminated string to a
  1178.           compound string if you use the string to specify the value
  1179.           of an argument that requires a compound string.  However,
  1180.           this conversion is costly in terms of storage consumption.
  1181.  
  1182.  
  1183.  
  1184.  
  1185.      Page 18                                         (printed 4/30/98)
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1193.  
  1194.  
  1195.  
  1196.           PPPPRRRRIIIIVVVVAAAATTTTEEEE, EEEEXXXXPPPPOOOORRRRTTTTEEEEDDDD, and IIIIMMMMPPPPOOOORRRRTTTTEEEEDDDD string literals require
  1197.           storage for a single allocation when the literal is
  1198.           declared; thereafter, storage is required for each reference
  1199.           to the literal.  Literals declared in-line require storage
  1200.           for both an allocation and a reference.
  1201.  
  1202.           The following table summarizes data storage consumption for
  1203.           string literals.  The storage requirement for an allocation
  1204.           consists of a fixed portion and a variable portion.  The
  1205.           fixed portion of an allocation is roughly the same as the
  1206.           storage requirement for a reference (a few bytes).  The
  1207.           storage consumed by the variable portion depends on the size
  1208.           of the literal value (that is, the length of the string).
  1209.           To conserve storage space, avoid making string literal
  1210.           declarations that result in an allocation per use.
  1211.  
  1212.                                                             SSSSttttoooorrrraaaaggggeeee RRRReeeeqqqquuuuiiiirrrreeeemmmmeeeennnnttttssss
  1213.           DDDDeeeeccccllllaaaarrrraaaattttiiiioooonnnn   DDDDaaaattttaaaa TTTTyyyyppppeeee         UUUUsssseeeedddd AAAAssss           PPPPeeeerrrr UUUUsssseeee
  1214.           In-line       Null-terminated   Null-terminated   An allocation and a
  1215.                                                             reference (within
  1216.                                                             the module)
  1217.           Private       Null-terminated   Null-terminated   A reference (within
  1218.                                                             the module)
  1219.           Exported      Null-terminated   Null-terminated   A reference (within
  1220.                                                             the UID hierarchy)
  1221.           Imported      Null-terminated   Null-terminated   A reference (within
  1222.                                                             the UID hierarchy)
  1223.           In-line       Null-terminated   Compound          An allocation and a
  1224.                                                             reference (within
  1225.                                                             the module)
  1226.           Private       Null-terminated   Compound          An allocation and a
  1227.                                                             reference (within
  1228.                                                             the module)
  1229.           Exported      Null-terminated   Compound          A reference (within
  1230.                                                             the UID hierarchy)
  1231.           Imported      Null-terminated   Compound          A reference (within
  1232.                                                             the UID hierarchy)
  1233.           In-line       Compound          Compound          An allocation and a
  1234.                                                             reference (within
  1235.                                                             the module)
  1236.           Private       Compound          Compound          A reference (within
  1237.                                                             the module)
  1238.           Exported      Compound          Compound          A reference (within
  1239.                                                             the UID hierarchy)
  1240.           Imported      Compound          Compound          A reference (within
  1241.                                                             the UID hierarchy)
  1242.  
  1243.         IIIInnnntttteeeeggggeeeerrrr LLLLiiiitttteeeerrrraaaallllssss
  1244.           An integer literal represents the value of a whole number.
  1245.           Integer literals have the form of an optional sign followed
  1246.           by one or more decimal digits.  An integer literal must not
  1247.           contain embedded spaces or commas.
  1248.  
  1249.  
  1250.  
  1251.      Page 19                                         (printed 4/30/98)
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1259.  
  1260.  
  1261.  
  1262.           Integer literals are stored in the UID file as long
  1263.           integers.  Exported and imported integer literals require a
  1264.           single allocation when the literal is declared; thereafter,
  1265.           a few bytes of storage are required for each reference to
  1266.           the literal.  Private integer literals and those declared
  1267.           in-line require allocation and reference storage per use.
  1268.           To conserve storage space, avoid making integer literal
  1269.           declarations that result in an allocation per use.
  1270.  
  1271.           The following table shows data storage consumption for
  1272.           integer literals.
  1273.  
  1274.           DDDDeeeeccccllllaaaarrrraaaattttiiiioooonnnn   SSSSttttoooorrrraaaaggggeeee RRRReeeeqqqquuuuiiiirrrreeeemmmmeeeennnnttttssss PPPPeeeerrrr UUUUsssseeee
  1275.           In-line       An allocation and a reference (within the module)
  1276.           Private       An allocation and a reference (within the module)
  1277.           Exported      A reference (within the UID hierarchy)
  1278.           Imported      A reference (within the UID hierarchy)
  1279.  
  1280.         BBBBoooooooolllleeeeaaaannnn LLLLiiiitttteeeerrrraaaallll
  1281.           A Boolean literal represents the value True (reserved
  1282.           keyword TTTTRRRRUUUUEEEE or OOOOnnnn) or False (reserved keyword FFFFAAAALLLLSSSSEEEE or
  1283.           OOOOffffffff).  These keywords are subject to case-sensitivity rules.
  1284.  
  1285.           In a UID file, TTTTRRRRUUUUEEEE is represented by the integer value 1
  1286.           and FFFFAAAALLLLSSSSEEEE is represented by the integer value 0.
  1287.  
  1288.           Data storage consumption for Boolean literals is the same as
  1289.           that for integer literals.
  1290.  
  1291.         FFFFllllooooaaaattttiiiinnnngggg----PPPPooooiiiinnnntttt LLLLiiiitttteeeerrrraaaallll
  1292.           A floating-point literal represents the value of a real (or
  1293.           float) number.  Floating-point literals have the following
  1294.           form:
  1295.  
  1296.           [++++|----][_i_n_t_e_g_e_r]...._i_n_t_e_g_e_r[EEEE|eeee[++++|----]_e_x_p_o_n_e_n_t]
  1297.  
  1298.           For maximum portability a floating-point literal can
  1299.           represent values in the range 1.0E-37 to 1.0E+37 with at
  1300.           least 6 significant digits.  On many machines this range
  1301.           will be wider, with more significant digits.  A floating-
  1302.           point literal must not contain embedded spaces or commas.
  1303.  
  1304.           Floating-point literals are stored in the UID file as
  1305.           double-precision, floating-point numbers.  The following
  1306.           table gives examples of valid and invalid floating-point
  1307.           notation for the UIL compiler.
  1308.  
  1309.         VVVVaaaalllliiiidddd FFFFllllooooaaaattttiiiinnnngggg----PPPPooooiiiinnnntttt LLLLiiiitttteeeerrrraaaallllssss   IIIInnnnvvvvaaaalllliiiidddd FFFFllllooooaaaattttiiiinnnngggg----PPPPooooiiiinnnntttt LLLLiiiitttteeeerrrraaaallllssss
  1310.         1.0                             1e1 (no decimal point)
  1311.         .1                              E-1 (no decimal point or digits)
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.      Page 20                                         (printed 4/30/98)
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1325.  
  1326.  
  1327.  
  1328.         3.1415E-2 (equals .031415)      2.87 e6 (embedded blanks)
  1329.         -6.29e7 (equals -62900000)      2.0e100 (out of range)
  1330.  
  1331.           Data storage consumption for floating-point literals is the
  1332.           same as that for integer literals.
  1333.  
  1334.         TTTThhhheeee AAAANNNNYYYY DDDDaaaattttaaaa TTTTyyyyppppeeee
  1335.           The purpose of the AAAANNNNYYYY data type is to shut off the data-
  1336.           type checking feature of the UIL compiler.  You can use the
  1337.           AAAANNNNYYYY data type for the following:
  1338.  
  1339.  
  1340.             +o  Specifying the type of a callback procedure tag
  1341.  
  1342.             +o  Specifying the type of a user-defined argument
  1343.  
  1344.  
  1345.           You can use the AAAANNNNYYYY data type when you need to use a type
  1346.           not supported by the UIL compiler or when you want the
  1347.           data-type restrictions imposed by the compiler to be
  1348.           relaxed.  For example, you might want to define a widget
  1349.           having an argument that can accept different types of
  1350.           values, depending on run-time circumstances.
  1351.  
  1352.           If you specify that an argument takes an AAAANNNNYYYY value, the
  1353.           compiler does not check the type of the value specified for
  1354.           that argument; therefore, you need to take care when
  1355.           specifying a value for an argument of type AAAANNNNYYYY.  You could
  1356.           get unexpected results at run time if you pass a value
  1357.           having a data type that the widget does not support for that
  1358.           argument.
  1359.  
  1360.         EEEExxxxpppprrrreeeessssssssiiiioooonnnnssss
  1361.           UIL includes compile-time value expressions.  These
  1362.           expressions can contain references to other UIL values, but
  1363.           cannot be forward referenced.
  1364.  
  1365.           The following table lists the set of operators in UIL that
  1366.           allow you to create integer, real, and Boolean values based
  1367.           on other values defined with the UIL module.  In the table,
  1368.           a precedence of 1 is the highest.
  1369.  
  1370.            OOOOppppeeeerrrraaaattttoooorrrr   OOOOppppeeeerrrraaaannnndddd TTTTyyyyppppeeeessss     MMMMeeeeaaaannnniiiinnnngggg            PPPPrrrreeeecccceeeeddddeeeennnncccceeee
  1371.            ~~~~          Boolean           NOT                1
  1372.                       integer           One's complement
  1373.            ----          float             Negate             1
  1374.                       integer           Negate
  1375.            ++++          float             NOP                1
  1376.                       integer           NOP
  1377.            ****          float,float       Multiply           2
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.      Page 21                                         (printed 4/30/98)
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1391.  
  1392.  
  1393.  
  1394.                       integer,integer   Multiply
  1395.            ////          float,float       Divide             2
  1396.                       integer,integer   Divide
  1397.            ++++          float,float       Add                3
  1398.                       integer,integer   Add
  1399.            ----          float,float       Subtract           3
  1400.                       integer,integer   Subtract
  1401.            >>>>>>>>         integer,integer   Shift right        4
  1402.            <<<<<<<<         integer,integer   Shift left         4
  1403.            &&&&          Boolean,Boolean   AND                5
  1404.                       integer,integer   Bitwise AND
  1405.                       string,string     Concatenate
  1406.            ||||          Boolean,Boolean   OR                 6
  1407.                       integer,integer   Bitwise OR
  1408.            ^^^^          Boolean,Boolean   XOR                6
  1409.                       integer,integer   Bitwise XOR
  1410.  
  1411.           A string can be either a single compound string or a
  1412.           sequence of compound strings.  If the two concatenated
  1413.           strings have different properties (such as writing direction
  1414.           or character set), the result of the concatenation is a
  1415.           multisegment compound string.
  1416.  
  1417.           The string resulting from the concatenation is a null-
  1418.           terminated string unless one or more of the following
  1419.           conditions exists:
  1420.  
  1421.  
  1422.             +o  One of the operands is a compound string
  1423.  
  1424.             +o  The operands have different character set properties
  1425.  
  1426.             +o  The operands have different writing directions
  1427.  
  1428.  
  1429.           Then the resulting string is a compound string. You cannot
  1430.           use imported or exported values as operands of the
  1431.           concatenation operator.
  1432.  
  1433.           The result of each operator has the same type as its
  1434.           operands.  You cannot mix types in an expression without
  1435.           using conversion routines.
  1436.  
  1437.           You can use parentheses to override the normal precedence of
  1438.           operators.  In a sequence of unary operators, the operations
  1439.           are performed in right-to-left order.  For example, ---- ++++ ----AAAA
  1440.           is equivalent to ----((((++++((((----AAAA)))))))).  In a sequence of binary
  1441.           operators of the same precedence, the operations are
  1442.           performed in left-to-right order.  For example, AAAA****BBBB////CCCC****DDDD is
  1443.           equivalent to ((((((((AAAA****BBBB))))////CCCC))))****DDDD.
  1444.  
  1445.           A value declaration gives a value a name.  You cannot
  1446.  
  1447.  
  1448.  
  1449.      Page 22                                         (printed 4/30/98)
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1457.  
  1458.  
  1459.  
  1460.           redefine the value of that name in a subsequent value
  1461.           declaration.  You can use a value containing operators and
  1462.           functions anywhere you can use a value in a UIL module.  You
  1463.           cannot use imported values as operands in expressions.
  1464.  
  1465.           Several of the binary operators are defined for multiple
  1466.           data types.  For example, the operator for multiplication
  1467.           (****) is defined for both floating-point and integer operands.
  1468.  
  1469.           For the UIL compiler to perform these binary operations,
  1470.           both operands must be of the same type.  If you supply
  1471.           operands of different data types, the UIL compiler
  1472.           automatically converts one of the operands to the type of
  1473.           the other according to the following conversions rules.
  1474.  
  1475.  
  1476.             +o  If the operands are an integer and a boolean, the
  1477.                boolean is converted to an integer.
  1478.  
  1479.             +o  If the operands are an integer and a floating-point,
  1480.                the integer is converted to an floating-point.
  1481.  
  1482.             +o  If the operands are a floating-point and a boolean, the
  1483.                boolean is converted to a floating-point.
  1484.  
  1485.  
  1486.           You can also explicitly convert the data type of a value by
  1487.           using one of the conversion functions IIIINNNNTTTTEEEEGGGGEEEERRRR, FFFFLLLLOOOOAAAATTTT or
  1488.           SSSSIIIINNNNGGGGLLLLEEEE____FFFFLLLLOOOOAAAATTTT.
  1489.  
  1490.         FFFFuuuunnnnccccttttiiiioooonnnnssss
  1491.           UIL provides functions to generate the following types of
  1492.           values:
  1493.  
  1494.  
  1495.             +o  Character sets
  1496.  
  1497.             +o  Keysyms
  1498.  
  1499.             +o  Colors
  1500.  
  1501.             +o  Pixmaps
  1502.  
  1503.             +o  Single-precision, floating-point numbers
  1504.  
  1505.             +o  Double-precision, floating-point numbers
  1506.  
  1507.             +o  Fonts
  1508.  
  1509.             +o  Fontsets
  1510.  
  1511.             +o  Font tables
  1512.  
  1513.  
  1514.  
  1515.      Page 23                                         (printed 4/30/98)
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1523.  
  1524.  
  1525.  
  1526.             +o  Compound strings
  1527.  
  1528.             +o  Compound string tables
  1529.  
  1530.             +o  ASCIZ (null-terminated) string tables
  1531.  
  1532.             +o  Wide character strings
  1533.  
  1534.             +o  Widget class names
  1535.  
  1536.             +o  Integer tables
  1537.  
  1538.             +o  Arguments
  1539.  
  1540.             +o  Reasons
  1541.  
  1542.             +o  Translation tables
  1543.  
  1544.  
  1545.           Remember that all examples in the following sections assume
  1546.           case-insensitive mode.  Keywords are shown in uppercase
  1547.           letters to distinguish them from user-specified names, which
  1548.           are shown in lowercase letters.  This use of uppercase
  1549.           letters is not required in case-insensitive mode.  In case-
  1550.           sensitive mode, keywords must be in lowercase letters.
  1551.  
  1552.  
  1553.           CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n[,,,, property[,,,, ...]]))))
  1554.                You can define your own character sets with the
  1555.                CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT function.  You can use the CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT
  1556.                function anywhere a character set can be specified.
  1557.  
  1558.                The result of the CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT function is a character
  1559.                set with the name _s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n and the properties
  1560.                you specify. _S_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n must be a null-
  1561.                terminated string.  You can optionally include one or
  1562.                both of the following clauses to specify properties for
  1563.                the resulting character set:
  1564.  
  1565.                RRRRIIIIGGGGHHHHTTTT____TTTTOOOO____LLLLEEEEFFFFTTTT ==== _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n
  1566.                SSSSIIIIXXXXTTTTEEEEEEEENNNN____BBBBIIIITTTT ==== _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n
  1567.  
  1568.                The RRRRIIIIGGGGHHHHTTTT____TTTTOOOO____LLLLEEEEFFFFTTTT clause sets the default writing
  1569.                direction of the string from right to left if
  1570.                _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n is True, and right to left
  1571.                otherwise.
  1572.  
  1573.                The SSSSIIIIXXXXTTTTEEEEEEEENNNN____BBBBIIIITTTT clause allows the strings associated
  1574.                with this character set to be interpreted as 16-bit
  1575.                characters if _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n is True, and 8-bit
  1576.                characters otherwise.
  1577.  
  1578.  
  1579.  
  1580.  
  1581.      Page 24                                         (printed 4/30/98)
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1589.  
  1590.  
  1591.  
  1592.           KKKKEEEEYYYYSSSSYYYYMMMM((((_s_t_r_i_n_g__l_i_t_e_r_a_l))))
  1593.                The KKKKEEEEYYYYSSSSYYYYMMMM function is used to specify a keysym for a
  1594.                mnemonic resource.  The _s_t_r_i_n_g__l_i_t_e_r_a_l must contain
  1595.                exactly one character.
  1596.  
  1597.           CCCCOOOOLLLLOOOORRRR((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n[,,,,FFFFOOOORRRREEEEGGGGRRRROOOOUUUUNNNNDDDD|BBBBAAAACCCCKKKKGGGGRRRROOOOUUUUNNNNDDDD]))))
  1598.                The CCCCOOOOLLLLOOOORRRR function supports the definition of colors.
  1599.                Using the CCCCOOOOLLLLOOOORRRR function, you can designate a value to
  1600.                specify a color and then use that value for arguments
  1601.                requiring a color value.  The string expression names
  1602.                the color you want to define; the optional keywords
  1603.                FFFFOOOORRRREEEEGGGGRRRROOOOUUUUNNNNDDDD and BBBBAAAACCCCKKKKGGGGRRRROOOOUUUUNNNNDDDD identify how the color is to
  1604.                be displayed on a monochrome device when the color is
  1605.                used in the definition of a color table.
  1606.  
  1607.                The UIL compiler does not have built-in color names.
  1608.                Colors are a server-dependent attribute of an object.
  1609.                Colors are defined on each server and may have
  1610.                different red-green-blue (RGB) values on each server.
  1611.                The string you specify as the color argument must be
  1612.                recognized by the server on which your application
  1613.                runs.
  1614.  
  1615.                In a UID file, UIL represents a color as a character
  1616.                string.  MRM calls X translation routines that convert
  1617.                a color string to the device-specific pixel value.  If
  1618.                you are running on a monochrome server, all colors
  1619.                translate to black or white.  If you are on a color
  1620.                server, the color names translate to their proper
  1621.                colors if the following conditions are met:
  1622.  
  1623.  
  1624.                  +o  The color is defined.
  1625.  
  1626.                  +o  The color map is not yet full.
  1627.  
  1628.  
  1629.                If the color map is full, even valid colors translate
  1630.                to black or white (foreground or background).
  1631.  
  1632.                Interfaces do not, in general, specify colors for
  1633.                widgets, so that the selection of colors can be
  1634.                controlled by the user through the ....XXXXddddeeeeffffaaaauuuullllttttssss file.
  1635.  
  1636.                To write an application that runs on both monochrome
  1637.                and color devices, you need to specify which colors in
  1638.                a color table (defined with the CCCCOOOOLLLLOOOORRRR____TTTTAAAABBBBLLLLEEEE function)
  1639.                map to the background and which colors map to the
  1640.                foreground. UIL lets you use the CCCCOOOOLLLLOOOORRRR function to
  1641.                designate this mapping in the definition of the color.
  1642.                The following example shows how to use the CCCCOOOOLLLLOOOORRRR
  1643.                function to map the color red to the background color
  1644.  
  1645.  
  1646.  
  1647.      Page 25                                         (printed 4/30/98)
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1655.  
  1656.  
  1657.  
  1658.                on a monochrome device:
  1659.  
  1660.                VALUE c: COLOR ( 'red',BACKGROUND );
  1661.  
  1662.                The mapping comes into play only when the MRM is given
  1663.                a color and the application is to be displayed on a
  1664.                monochrome device.  In this case, each color is
  1665.                considered to be in one of the following three
  1666.                categories:
  1667.  
  1668.  
  1669.                  +o  The color is mapped to the background color on the
  1670.                     monochrome device.
  1671.  
  1672.                  +o  The color is mapped to the foreground color on the
  1673.                     monochrome device.
  1674.  
  1675.                  +o  Monochrome mapping is undefined for this color.
  1676.  
  1677.  
  1678.                If the color is mapped to the foreground or background
  1679.                color, MRM substitutes the foreground or background
  1680.                color, respectively.  If you do not specify the
  1681.                monochrome mapping for a color, MRM passes the color
  1682.                string to the Motif Toolkit for mapping to the
  1683.                foreground or background color.
  1684.  
  1685.           RRRRGGGGBBBB((((_r_e_d__i_n_t_e_g_e_r,,,, _g_r_e_e_n__i_n_t_e_g_e_r,,,, _b_l_u_e__i_n_t_e_g_e_r))))
  1686.                The three integers define the values for the red,
  1687.                green, and blue components of the color, in that order.
  1688.                The values of these components can range from 0 to
  1689.                65,535, inclusive.
  1690.  
  1691.                In a UID file, UIL represents an RRRRGGGGBBBB value as three
  1692.                integers.  MRM calls X translation routines that
  1693.                convert the integers to the device-specific pixel
  1694.                value.  If you are running on a monochrome server, all
  1695.                colors translate to black or white.  If you are on a
  1696.                color server, RRRRGGGGBBBB values translate to their proper
  1697.                colors if the colormap is not yet full.  If the
  1698.                colormap is full, values translate to black or white
  1699.                (foreground or background).
  1700.  
  1701.           CCCCOOOOLLLLOOOORRRR____TTTTAAAABBBBLLLLEEEE((((_c_o_l_o_r__e_x_p_r_e_s_s_i_o_n====''''_c_h_a_r_a_c_t_e_r''''[,,,,...]))))
  1702.                The color expression is a previously defined color, a
  1703.                color defined in line with the CCCCOOOOLLLLOOOORRRR function, or the
  1704.                phrase BBBBAAAACCCCKKKKGGGGRRRROOOOUUUUNNNNDDDD CCCCOOOOLLLLOOOORRRR or FFFFOOOORRRREEEEGGGGRRRROOOOUUUUNNNNDDDD CCCCOOOOLLLLOOOORRRR.  The
  1705.                character can be any valid UIL character.
  1706.  
  1707.                The CCCCOOOOLLLLOOOORRRR____TTTTAAAABBBBLLLLEEEE function provides a device-independent
  1708.                way to specify a set of colors. The CCCCOOOOLLLLOOOORRRR____TTTTAAAABBBBLLLLEEEE
  1709.                function accepts either previously defined UIL color
  1710.  
  1711.  
  1712.  
  1713.      Page 26                                         (printed 4/30/98)
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1721.  
  1722.  
  1723.  
  1724.                names or in line color definitions (using the CCCCOOOOLLLLOOOORRRR
  1725.                function).  A color table must be private because its
  1726.                contents must be known by the UIL compiler to construct
  1727.                an icon.  The colors within a color table, however, can
  1728.                be imported, exported, or private.
  1729.  
  1730.                The single letter associated with each color is the
  1731.                character you use to represent that color when creating
  1732.                an icon.  Each letter used to represent a color must be
  1733.                unique within the color table.
  1734.  
  1735.           IIIICCCCOOOONNNN(((([CCCCOOOOLLLLOOOORRRR____TTTTAAAABBBBLLLLEEEE====_c_o_l_o_r__t_a_b_l_e__n_a_m_e,,,,] _r_o_w[,,,,...))))
  1736.                The color table name must refer to a previously defined
  1737.                color table and the row is a character expression
  1738.                giving one row of the icon.
  1739.  
  1740.                The IIIICCCCOOOONNNN function describes a rectangular icon that is
  1741.                x pixels wide and y pixels high. The strings surrounded
  1742.                by single quotation marks describe the icon. Each
  1743.                string represents a row in the icon; each character in
  1744.                the string represents a pixel.
  1745.  
  1746.                The first row in an icon definition determines the
  1747.                width of the icon.  All rows must have the same number
  1748.                of characters as the first row. The height of the icon
  1749.                is dictated by the number of rows.
  1750.  
  1751.                The first argument of the IIIICCCCOOOONNNN function (the color
  1752.                table specification) is optional and identifies the
  1753.                colors that are available in this icon. By using the
  1754.                single letter associated with each color, you can
  1755.                specify the color of each pixel in the icon. The icon
  1756.                must be constructed of characters defined in the
  1757.                specified color table.
  1758.  
  1759.                A default color table is used if you omit the argument
  1760.                specifying the color table.  To make use of the default
  1761.                color table, the rows of your icon must contain only
  1762.                spaces and asterisks.  The default color table is
  1763.                defined as follows:
  1764.  
  1765.                COLOR_TABLE( BACKGROUND COLOR = ' ', FOREGROUND COLOR = '*' )
  1766.  
  1767.  
  1768.                You can define other characters to represent the
  1769.                background color and foreground color by replacing the
  1770.                space and asterisk in the BBBBAAAACCCCKKKKGGGGRRRROOOOUUUUNNNNDDDD CCCCOOOOLLLLOOOORRRR and
  1771.                FFFFOOOORRRREEEEGGGGRRRROOOOUUUUNNNNDDDD CCCCOOOOLLLLOOOORRRR clauses shown in the previous
  1772.                statement.  You can specify icons as private, imported,
  1773.                or exported.  Use the MRM function MMMMrrrrmmmmFFFFeeeettttcccchhhhIIIIccccoooonnnnLLLLiiiitttteeeerrrraaaallll
  1774.                to retrieve an exported icon at run time.
  1775.  
  1776.  
  1777.  
  1778.  
  1779.      Page 27                                         (printed 4/30/98)
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1787.  
  1788.  
  1789.  
  1790.           XXXXBBBBIIIITTTTMMMMAAAAPPPPFFFFIIIILLLLEEEE((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n))))
  1791.                The XXXXBBBBIIIITTTTMMMMAAAAPPPPFFFFIIIILLLLEEEE function is similar to the IIIICCCCOOOONNNN
  1792.                function in that both describe a rectangular icon that
  1793.                is x pixels wide and y pixels high.  However,
  1794.                XXXXBBBBIIIITTTTMMMMAAAAPPPPFFFFIIIILLLLEEEE allows you to specify an external file
  1795.                containing the definition of an X bitmap, whereas all
  1796.                IIIICCCCOOOONNNN function definitions must be coded directly within
  1797.                UIL.  X bitmap files can be generated by many different
  1798.                X applications.  UIL reads these files through the
  1799.                XXXXBBBBIIIITTTTMMMMAAAAPPPPFFFFIIIILLLLEEEE function, but does not support creation of
  1800.                these files.  The X bitmap file specified as the
  1801.                argument to the XXXXBBBBIIIITTTTMMMMAAAAPPPPFFFFIIIILLLLEEEE function is read at
  1802.                application run time by MRM.
  1803.  
  1804.                The XXXXBBBBIIIITTTTMMMMAAAAPPPPFFFFIIIILLLLEEEE function returns a value of type ppppiiiixxxxmmmmaaaapppp
  1805.                and can be used anywhere a pixmap data type is
  1806.                expected.
  1807.  
  1808.           SSSSIIIINNNNGGGGLLLLEEEE____FFFFLLLLOOOOAAAATTTT((((_r_e_a_l__n_u_m_b_e_r__l_i_t_e_r_a_l))))
  1809.                The SSSSIIIINNNNGGGGLLLLEEEE____FFFFLLLLOOOOAAAATTTT function lets you store floating-point
  1810.                literals in UIL files as single-precision, floating-
  1811.                point numbers.  Single-precision floating-point numbers
  1812.                can often be stored using less memory than double-
  1813.                precision, floating-point numbers.  The
  1814.                _r_e_a_l__n_u_m_b_e_r__l_i_t_e_r_a_l can be either an integer literal or
  1815.                a floating-point literal.  A value defined using this
  1816.                function cannot be used in an arithmetic expression.
  1817.  
  1818.           FFFFLLLLOOOOAAAATTTT((((_r_e_a_l__n_u_m_b_e_r__l_i_t_e_r_a_l))))
  1819.                The FFFFLLLLOOOOAAAATTTT function lets you store floating-point
  1820.                literals in UIL files as double-precision, floating-
  1821.                point numbers.  The _r_e_a_l__n_u_m_b_e_r__l_i_t_e_r_a_l can be either
  1822.                an integer literal or a floating-point literal.
  1823.  
  1824.           FFFFOOOONNNNTTTT((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n[,,,, CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT====_c_h_a_r__s_e_t]))))
  1825.                You define fonts with the FFFFOOOONNNNTTTT function.  Using the
  1826.                FFFFOOOONNNNTTTT function, you designate a value to specify a font
  1827.                and then use that value for arguments that require a
  1828.                font value.  The UIL compiler has no built-in fonts.
  1829.  
  1830.                Each font makes sense only in the context of a
  1831.                character set. The FFFFOOOONNNNTTTT function has an additional
  1832.                parameter to let you specify the character set for the
  1833.                font. This parameter is optional; if you omit it, the
  1834.                default character set depends on the value of the LLLLAAAANNNNGGGG
  1835.                environment variable if it is set of the value of
  1836.                XXXXmmmmFFFFAAAALLLLLLLLBBBBAAAACCCCKKKK____CCCCHHHHAAAARRRRSSSSEEEETTTT if LLLLAAAANNNNGGGG is not set.
  1837.  
  1838.                The string expression specifies the name of the font
  1839.                and the clause CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT = _c_h_a_r__s_e_t specifies the
  1840.                character set for the font. The string expression used
  1841.                in the FFFFOOOONNNNTTTT function cannot be a compound string.
  1842.  
  1843.  
  1844.  
  1845.      Page 28                                         (printed 4/30/98)
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1853.  
  1854.  
  1855.  
  1856.           FFFFOOOONNNNTTTTSSSSEEEETTTT((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n[,,,,...][,,,, CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT====_c_h_a_r_s_e_t]))))
  1857.                You define fontsets with the FFFFOOOONNNNTTTTSSSSEEEETTTT function.  Using
  1858.                the FFFFOOOONNNNTTTTSSSSEEEETTTT function, you designate a set of values to
  1859.                specify fonts and then use those values for arguments
  1860.                that require a fontset.  The UIL compiler has no
  1861.                built-in fonts.
  1862.  
  1863.                Each font makes sense only in the context of a
  1864.                character set. The FFFFOOOONNNNTTTTSSSSEEEETTTT function has an additional
  1865.                parameter to let you specify the character set for the
  1866.                font.  This parameter is optional; if you omit it, the
  1867.                default character set depends on the value of the LLLLAAAANNNNGGGG
  1868.                environment variable if it is set of the value of
  1869.                XXXXmmmmFFFFAAAALLLLLLLLBBBBAAAACCCCKKKK____CCCCHHHHAAAARRRRSSSSEEEETTTT if LLLLAAAANNNNGGGG is not set.
  1870.  
  1871.                The string expression specifies the name of the font
  1872.                and the clause CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT = _c_h_a_r__s_e_t specifies the
  1873.                character set for the font. The string expression used
  1874.                in the FFFFOOOONNNNTTTTSSSSEEEETTTT function cannot be a compound string.
  1875.  
  1876.           FFFFOOOONNNNTTTT____TTTTAAAABBBBLLLLEEEE((((_f_o_n_t__e_x_p_r_e_s_s_i_o_n[,,,,...]))))
  1877.                A font table is a sequence of pairs of fonts and
  1878.                character sets.  At run time when an object needs to
  1879.                display a string, the object scans the font table for
  1880.                the character set that matches the character set of the
  1881.                string to be displayed.  UIL provides the FFFFOOOONNNNTTTT____TTTTAAAABBBBLLLLEEEE
  1882.                function to let you supply such an argument.  The font
  1883.                expression is created with the FFFFOOOONNNNTTTT and FFFFOOOONNNNTTTTSSSSEEEETTTT
  1884.                functions.
  1885.  
  1886.                If you specify a single font value to specify an
  1887.                argument that requires a font table, the UIL compiler
  1888.                automatically converts a font value to a font table.
  1889.  
  1890.           CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n[,,,,_p_r_o_p_e_r_t_y[,,,,...]]))))
  1891.                Use the CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG function to set properties of a
  1892.                null-terminated string and to convert it into a
  1893.                compound string. The properties you can set are the
  1894.                character set, writing direction, and separator.
  1895.  
  1896.                The result of the CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG function is a
  1897.                compound string with the string expression as its
  1898.                value.  You can optionally include one or more of the
  1899.                following clauses to specify properties for the
  1900.                resulting compound string:
  1901.  
  1902.                CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT = _c_h_a_r_a_c_t_e_r__s_e_t
  1903.                RRRRIIIIGGGGHHHHTTTT____TTTTOOOO____LLLLEEEEFFFFTTTT = _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n
  1904.                SSSSEEEEPPPPAAAARRRRAAAATTTTEEEE = _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n
  1905.  
  1906.                The CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT clause specifies the character set
  1907.                for the string.  If you omit the CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT clause,
  1908.  
  1909.  
  1910.  
  1911.      Page 29                                         (printed 4/30/98)
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1919.  
  1920.  
  1921.  
  1922.                the resulting string has the same character set as
  1923.                ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn.
  1924.  
  1925.                The RRRRIIIIGGGGHHHHTTTT____TTTTOOOO____LLLLEEEEFFFFTTTT clause sets the writing direction of
  1926.                the string from right to left if _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n is
  1927.                True, and left to right otherwise. Specifying this
  1928.                argument does not cause the value of the string
  1929.                expression to change.  If you omit the RRRRIIIIGGGGHHHHTTTT____TTTTOOOO____LLLLEEEEFFFFTTTT
  1930.                argument, the resulting string has the same writing
  1931.                direction as _s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n.
  1932.  
  1933.                The SSSSEEEEPPPPAAAARRRRAAAATTTTEEEE clause appends a separator to the end of
  1934.                the compound string if _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n is True.  If
  1935.                you omit the SSSSEEEEPPPPAAAARRRRAAAATTTTEEEE clause, the resulting string does
  1936.                not have a separator.
  1937.  
  1938.                You cannot use imported or exported values as the
  1939.                operands of the CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG function.
  1940.  
  1941.           CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n[,,,,...]))))
  1942.                A compound string table is an array of compound
  1943.                strings.  Objects requiring a list of string values,
  1944.                such as the XXXXmmmmNNNNiiiitttteeeemmmmssss and XXXXmmmmNNNNsssseeeelllleeeecccctttteeeeddddIIIItttteeeemmmmssss arguments for
  1945.                the list widget, use string table values.  The
  1946.                CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE function builds the values for
  1947.                these two arguments of the list widget.  The
  1948.                CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE function generates a value of
  1949.                type ssssttttrrrriiiinnnngggg____ttttaaaabbbblllleeee.  The name SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE is a synonym
  1950.                for CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE.
  1951.  
  1952.                The strings inside the string table can be simple
  1953.                strings, which the UIL compiler automatically converts
  1954.                to compound strings.
  1955.  
  1956.           AAAASSSSCCCCIIIIZZZZ____SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n[,,,,...]))))
  1957.                An ASCIZ string table is an array of ASCIZ (null-
  1958.                terminated) string values separated by commas. This
  1959.                function allows you to pass more than one ASCIZ string
  1960.                as a callback tag value.  The AAAASSSSCCCCIIIIZZZZ____SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE
  1961.                function generates a value of type aaaasssscccciiiizzzz____ttttaaaabbbblllleeee.  The
  1962.                name AAAASSSSCCCCIIIIZZZZ____TTTTAAAABBBBLLLLEEEE is a synonym for AAAASSSSCCCCIIIIZZZZ____SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE.
  1963.  
  1964.           WWWWIIIIDDDDEEEE____CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n))))
  1965.                Use the WWWWIIIIDDDDEEEE____CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR function to generate a wide
  1966.                character string from null-terminated string in the
  1967.                current locale.
  1968.  
  1969.           CCCCLLLLAAAASSSSSSSS____RRRREEEECCCC____NNNNAAAAMMMMEEEE((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n))))
  1970.                Use the CCCCLLLLAAAASSSSSSSS____RRRREEEECCCC____NNNNAAAAMMMMEEEE function to generate a widget
  1971.                class name.  For a widget class defined by the toolkit,
  1972.                the string argument is the name of the class.  For a
  1973.                user-defined widget, the string argument is the name of
  1974.  
  1975.  
  1976.  
  1977.      Page 30                                         (printed 4/30/98)
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  1985.  
  1986.  
  1987.  
  1988.                the creation routine for the widget.
  1989.  
  1990.           IIIINNNNTTTTEEEEGGGGEEEERRRR____TTTTAAAABBBBLLLLEEEE((((_i_n_t_e_g_e_r__e_x_p_r_e_s_s_i_o_n[,,,,...]))))
  1991.                An integer table is an array of integer values
  1992.                separated by commas.  This function allows you to pass
  1993.                more than one integer per callback tag value.  The
  1994.                IIIINNNNTTTTEEEEGGGGEEEERRRR____TTTTAAAABBBBLLLLEEEE function generates a value of type
  1995.                iiiinnnntttteeeeggggeeeerrrr____ttttaaaabbbblllleeee.
  1996.  
  1997.           AAAARRRRGGGGUUUUMMMMEEEENNNNTTTT((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n[,,,, _a_r_g_u_m_e_n_t__t_y_p_e]))))
  1998.                The AAAARRRRGGGGUUUUMMMMEEEENNNNTTTT function defines the arguments to a user-
  1999.                defined widget.  Each of the objects that can be
  2000.                described by UIL permits a set of arguments, listed in
  2001.                Appendix B.  For example, XXXXmmmmNNNNhhhheeeeiiiigggghhhhtttt is an argument to
  2002.                most objects and has integer data type.  To specify
  2003.                height for a user-defined widget, you can use the
  2004.                built-in argument name XXXXmmmmNNNNhhhheeeeiiiigggghhhhtttt, and specify an
  2005.                integer value when you declare the user-defined widget.
  2006.                You do not use the AAAARRRRGGGGUUUUMMMMEEEENNNNTTTT function to specify
  2007.                arguments that are built into the UIL compiler.
  2008.  
  2009.                The _s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n name is the name the UIL compiler
  2010.                uses for the argument in the UID file.  the
  2011.                _a_r_g_u_m_e_n_t__t_y_p_e is the type of value that can be
  2012.                associated with the argument.  If you omit the second
  2013.                argument, the default type is AAAANNNNYYYY and no value type
  2014.                checking occurs.  Use one of the following keywords to
  2015.                specify the argument type:
  2016.  
  2017.  
  2018.                  +o  ANY
  2019.  
  2020.                  +o  ASCIZ_TABLE
  2021.  
  2022.                  +o  BOOLEAN
  2023.  
  2024.                  +o  COLOR
  2025.  
  2026.                  +o  COLOR_TABLE
  2027.  
  2028.                  +o  COMPOUND_STRING
  2029.  
  2030.                  +o  FLOAT
  2031.  
  2032.                  +o  FONT
  2033.  
  2034.                  +o  FONT_TABLE
  2035.  
  2036.                  +o  FONTSET
  2037.  
  2038.                  +o  ICON
  2039.  
  2040.  
  2041.  
  2042.  
  2043.      Page 31                                         (printed 4/30/98)
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  2051.  
  2052.  
  2053.  
  2054.                  +o  INTEGER
  2055.  
  2056.                  +o  INTEGER_TABLE
  2057.  
  2058.                  +o  REASON
  2059.  
  2060.                  +o  SINGLE_FLOAT
  2061.  
  2062.                  +o  STRING
  2063.  
  2064.                  +o  STRING_TABLE
  2065.  
  2066.                  +o  TRANSLATION_TABLE
  2067.  
  2068.                  +o  WIDE_CHARACTER
  2069.  
  2070.                  +o  WIDGET
  2071.  
  2072.  
  2073.                You can use the AAAARRRRGGGGUUUUMMMMEEEENNNNTTTT function to allow the UIL
  2074.                compiler to recognize extensions to the Motif Toolkit.
  2075.                For example, an existing widget may accept a new
  2076.                argument.  Using the AAAARRRRGGGGUUUUMMMMEEEENNNNTTTT function, you can make
  2077.                this new argument available to the UIL compiler before
  2078.                the updated version of the compiler is released.
  2079.  
  2080.           RRRREEEEAAAASSSSOOOONNNN((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n))))
  2081.                The RRRREEEEAAAASSSSOOOONNNN function is useful for defining new reasons
  2082.                for user-defined widgets.
  2083.  
  2084.                Each of the objects in the Motif Toolkit defines a set
  2085.                of conditions under which it calls a user-defined
  2086.                function.  These conditions are known as callback
  2087.                reasons.  The user-defined functions are termed
  2088.                callback procedures.  In a UIL module, you use a
  2089.                callbacks list to specify which user-defined functions
  2090.                are to be called for which reasons.
  2091.  
  2092.                Appendix B lists the callback reasons supported by the
  2093.                Motif Toolkit objects.
  2094.  
  2095.                When you declare a user-defined widget, you can define
  2096.                callback reasons for that widget using the RRRREEEEAAAASSSSOOOONNNN
  2097.                function.  The string expression specifies the argument
  2098.                name stored in the UID file for the reason.  This
  2099.                reason name is supplied to the widget creation routine
  2100.                at run time.
  2101.  
  2102.           TTTTRRRRAAAANNNNSSSSLLLLAAAATTTTIIIIOOOONNNN____TTTTAAAABBBBLLLLEEEE((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n[,,,,...]))))
  2103.                Each of the Motif Toolkit widgets has a translation
  2104.                table that maps X events (for example, mouse button 1
  2105.                being pressed) to a sequence of actions. Through widget
  2106.  
  2107.  
  2108.  
  2109.      Page 32                                         (printed 4/30/98)
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116.      UUUUIIIILLLL((((5555XXXX))))                   UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV                   UUUUIIIILLLL((((5555XXXX))))
  2117.  
  2118.  
  2119.  
  2120.                arguments, such as the common translations argument,
  2121.                you can specify an alternate set of events or actions
  2122.                for a particular widget. The TTTTRRRRAAAANNNNSSSSLLLLAAAATTTTIIIIOOOONNNN____TTTTAAAABBBBLLLLEEEE function
  2123.                creates a translation table that can be used as the
  2124.                value of a argument that is of the data type
  2125.                ttttrrrraaaannnnssssllllaaaattttiiiioooonnnn____ttttaaaabbbblllleeee.
  2126.  
  2127.                You can use one of the following translation table
  2128.                directives with the TTTTRRRRAAAANNNNSSSSLLLLAAAATTTTIIIIOOOONNNN____TTTTAAAABBBBLLLLEEEE function:
  2129.                ####oooovvvveeeerrrrrrrriiiiddddeeee, ####aaaauuuuggggmmmmeeeennnntttt, or ####rrrreeeeppppllllaaaacccceeee.  The default is
  2130.                ####rrrreeeeppppllllaaaacccceeee.  If you specify one of these directives, it
  2131.                must be the first entry in the translation table.
  2132.  
  2133.                The ####oooovvvveeeerrrrrrrriiiiddddeeee directive causes any duplicate
  2134.                translations to be ignored.  For example, if a
  2135.                translation for <BBBBttttnnnn1111DDDDoooowwwwnnnn> is already defined in the
  2136.                current translations for a PushButton, the translation
  2137.                defined by _n_e_w__t_r_a_n_s_l_a_t_i_o_n_s overrides the current
  2138.                definition.  If the ####aaaauuuuggggmmmmeeeennnntttt directive is specified,
  2139.                the current definition takes precedence.  The ####rrrreeeeppppllllaaaacccceeee
  2140.                directive replaces all current translations with those
  2141.                specified in the XXXXmmmmNNNNttttrrrraaaannnnssssllllaaaattttiiiioooonnnnssss resource.
  2142.  
  2143.  
  2144.      RRRREEEELLLLAAAATTTTEEEEDDDD IIIINNNNFFFFOOOORRRRMMMMAAAATTTTIIIIOOOONNNN
  2145.           uuuuiiiillll((((1111XXXX)))), UUUUiiiillll((((3333XXXX))))
  2146.  
  2147.  
  2148.  
  2149.  
  2150.  
  2151.  
  2152.  
  2153.  
  2154.  
  2155.  
  2156.  
  2157.  
  2158.  
  2159.  
  2160.  
  2161.  
  2162.  
  2163.  
  2164.  
  2165.  
  2166.  
  2167.  
  2168.  
  2169.  
  2170.  
  2171.  
  2172.  
  2173.  
  2174.  
  2175.      Page 33                                         (printed 4/30/98)
  2176.  
  2177.  
  2178.  
  2179.